package com.dong.thread.threadbasic;

/**
 * 优雅的结束线程 - interrupt() and isInterrupted结束线程
 * interrupt也是设定标志位
 * 和使用volatile变量类似，只是interrupt是系统自带的标志位，而volatile变量是自己设置的标志位
 *      但是interrupt更优雅些，因为在循环中处于sleep或wait时，可以通过调用interrupt方法跳出当前循环结束线程
 *
 * 但是其打断时间也不是特别精确，比如一个阻塞容器，容量为5的时候结束生产者;
 * 但是，由于标志位的时间控制不是很精确，有可能生产者还继续生产一段儿时间
 *      要达到精确控制循环次数来结束线程，可以和调用interrupt()方法的线程相配合，再加上锁，以达到精确控制的目的（后面有讲例子）
 *
 * @author by jiweidong on 2021/11/23.
 */
public class T12_Thread_End_Interrupt {

    public static void main(String[] args) {
        Thread t = new Thread(() -> {
            while (!Thread.interrupted()) {
                // sleep wait
            }

            System.out.println("t end");
        });

        t.start();

        SleepHelper.sleepSeconds(1);

        t.interrupt();
    }
}
